package cn.bone.data02;

import java.util.Arrays;

public class BubbleSort {

    public static void main(String... args){

        int[] arr = {5, 2, 3, 6, 9, 12, 0, 4};
        bubbleSort2(arr);
        System.out.println(Arrays.toString(arr));
    }


    // 冒泡排序1
    public static void bubbleSort1(int[] array){
        if(array==null || array.length<=1){
            return;
        }

        /*
            因为是j和j+1比较，所以j的下标小于 length-1 即可
            每一次j的for循环排序完成后，最大的数就在最后一位了
            所以 j<array.length-i-1
        */
        for(int i=0; i<array.length; i++){
            for(int j=0; j<array.length-i-1; j++){
                if(array[j] > array[j+1]){
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
    }


    // 冒泡排序2
    public static void bubbleSort2(int[] array){
        if(array==null || array.length<=1){
            return;
        }
        for(int i=0; i<array.length; i++){
            //是否需要提前结束
            boolean flag = true;
            for(int j=0; j<array.length-i-1; j++){
                // 如果有数需要交换位置，flag=false
                if(array[j]>array[j+1]){
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flag = false;
                }
            }

            /*
                如果本轮的冒泡中，一次都不需要交换位置
                说明已经全部排序完毕了，后面的循环就不需要继续进行了
             */
            if(flag){
                break;
            }
        }
    }
}
